// 意义和用法跟函数柯里化相比正好相反，扩大适用范围，创建一个应用范围更广的函数。使本来只有特定对象才适用的方法，扩展到更多的对象。
Function.prototype.unCurrying = function () {
    let self = this
    return function () {
        return Function.prototype.call.apply(self, arguments)
    }
}
// 利用反柯里化创建检测数据类型的函数
let checkType = Object.prototype.toString.unCurrying()

console.log(checkType(1)) // [object Number]
console.log(checkType('hello')) // [object String]
console.log(checkType(true)) // [object Boolean]

// Test
let push = Array.prototype.push.unCurrying()
let obj = {
    'length': 1,
    '0': 1,
}

push(obj, 2, 3)
console.log(obj) // { '0': 1, '1': 2, '2': 3, length: 3 }

